// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName_ptr;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObjectImpl;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "OracleAlterTableItem.h"
#include "../OracleSQLObjectImpl.h"

class OracleAlterTableSplitPartition_NestedTablePartitionSpec : virtual public OracleSQLObjectImpl
{
public:
  SQLName_ptr partition;

  SQLObject_list_ptr segmentAttributeItems;

  OracleAlterTableSplitPartition_NestedTablePartitionSpec();

  SHAREDOBJECT(OracleAlterTableSplitPartition_NestedTablePartitionSpec);
  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  SQLName_ptr getPartition();

  void setPartition(SQLName_ptr partition);

  SQLObject_list_ptr getSegmentAttributeItems();

  void setSegmentAttributeItems(SQLObject_list_ptr segmentAttributeItems);
};
class OracleAlterTableSplitPartition_TableSpaceItem : virtual public OracleSQLObjectImpl
{
public:
  SQLName_ptr tablespace;

  OracleAlterTableSplitPartition_TableSpaceItem();

  OracleAlterTableSplitPartition_TableSpaceItem(SQLName_ptr tablespace);
  SHAREDOBJECT(OracleAlterTableSplitPartition_TableSpaceItem);

  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  SQLName_ptr getTablespace();

  void setTablespace(SQLName_ptr tablespace);
};
class OracleAlterTableSplitPartition_UpdateIndexesClause : virtual public OracleSQLObjectImpl
{
public:
  SQLObject_list_ptr items;

  OracleAlterTableSplitPartition_UpdateIndexesClause();
  SHAREDOBJECT(OracleAlterTableSplitPartition_UpdateIndexesClause);

  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  SQLObject_list_ptr getItems();

  void setItems(SQLObject_list_ptr items);
};

class OracleAlterTableSplitPartition : virtual public OracleAlterTableItem
{
public:
  SQLName_ptr name;
  SQLExpr_list_ptr at;
  SQLExpr_list_ptr values;
  OracleAlterTableSplitPartition_NestedTablePartitionSpec_list_ptr into;

  OracleAlterTableSplitPartition_UpdateIndexesClause_ptr updateIndexes;

  OracleAlterTableSplitPartition();
  SHAREDOBJECT(OracleAlterTableSplitPartition);
  
  // @Override
  void accept0(OracleASTVisitor_ptr visitor);

  OracleAlterTableSplitPartition_UpdateIndexesClause_ptr getUpdateIndexes();

  void setUpdateIndexes(OracleAlterTableSplitPartition_UpdateIndexesClause_ptr updateIndexes);

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  SQLExpr_list_ptr getAt();

  void setAt(SQLExpr_list_ptr at);

  OracleAlterTableSplitPartition_NestedTablePartitionSpec_list_ptr getInto();

  void setInto(OracleAlterTableSplitPartition_NestedTablePartitionSpec_list_ptr into);

  SQLExpr_list_ptr getValues();

  void setValues(SQLExpr_list_ptr values);
};
